package algo3c2g15.vista;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Observable;
import java.util.Observer;
import java.util.Vector;

import javax.swing.*;

import algo3c2g15.business.EdificioContainer;
import algo3c2g15.domain.*;



public class PanelConstrucciones extends JPanel implements Observer{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private Humano civil;
	private PanelConstrucciones panel = this;
	
	private JList listaConstrucciones = new JList();
	private JScrollPane scrollConstrucciones;
	
	public PanelConstrucciones (Humano humano){
		
		this.setLayout(null);
		this.setBounds(540,385,230,110);
		this.civil = humano;
		humano.getRegionActual().addObserver(this);
		
		// Construcciones
		
		JLabel tituloConstrucciones = new JLabel("Construcciones Disponibles");
		tituloConstrucciones.setBounds(30,18,70,10);
		
		scrollConstrucciones = new JScrollPane(listaConstrucciones);
		scrollConstrucciones.setBounds(10,30,275,100);
		
		JButton seleccionarConstruccion = new JButton("Seleccionar");
		seleccionarConstruccion.setBounds(130, 150, 120, 20);
		seleccionarConstruccion.addActionListener( new EscuchaSeleccionarConstruccion() );
		
		JButton cerrar = new JButton("Cerrar");
		cerrar.setBounds(190, 185, 80, 25);
		cerrar.addActionListener( new EscuchaBotonCerrar() );
		
		add(tituloConstrucciones);
		add(listaConstrucciones);
		add(scrollConstrucciones);
		add(seleccionarConstruccion);
		add(cerrar);

		cargarListaConstrucciones();
			
	}
	
	private class EscuchaBotonCerrar implements ActionListener
	{	public void actionPerformed(ActionEvent e)
		{	
			civil.getRegionActual().deleteObserver( panel );
			VentanaConstrucciones.getInstance().dispose();
		}
	}
	
	
	private class EscuchaSeleccionarConstruccion implements ActionListener {
		public void actionPerformed(ActionEvent e){
			HashSet<EdificioContainer> construcciones = new HashSet<EdificioContainer>();
			for (Object o : listaConstrucciones.getSelectedValues()) {
				EdificioContainer edificio = (EdificioContainer) o;
				construcciones.add(edificio);
			}
			PanelComandos.getInstance().addConstruccion( construcciones.iterator().next());
		}
	}
	
	
	public void update (Observable o, Object arg){
		
	}

	public void cargarListaConstrucciones () {
		Vector<EdificioContainer> lista = new Vector<EdificioContainer>();
		lista.add(new EdificioContainer(new Aeropuerto()));
		lista.add(new EdificioContainer(new Casa()));
		lista.add(new EdificioContainer(new EscuelaMilitar()));
		lista.add(new EdificioContainer(new Fabrica()));
		lista.add(new EdificioContainer(new FabricaMilitar()));
		
		listaConstrucciones.setListData(lista);
		scrollConstrucciones.setViewportView(listaConstrucciones);
		
	}

	public Humano getCivil() {
		return civil;
	}
	
}
